import { Controller, Get, Post, Body, Patch, Param, Delete, Query } from '@nestjs/common';
import { DictService } from './dict.service';
import { CreateDictDto } from './dto/create-dict.dto';
import { UpdateDictDto } from './dto/update-dict.dto';
import { Dict } from 'src/database/entitys/dict.entity';
import { PageDto } from 'src/common/dto/page.dto';
import R from 'src/common/dto/R.dto';

/**
 * 字典管理控制器
 * 处理字典相关的HTTP请求
 */
@Controller('system/dict')
export class DictController {
  constructor(private readonly dictService: DictService) {}

  /**
   * 创建新的字典
   * @param createDictDto 创建字典的数据传输对象
   * @returns 返回创建成功的响应
   */
  @Post()
  async create(@Body() createDictDto: CreateDictDto) {
    return R.success(await this.dictService.create(createDictDto), '创建成功');
  }

  /**
   * 分页查询字典列表
   * @param pageDto 分页查询参数，包含页码、每页大小和字典查询条件
   * @returns 返回字典列表和总数
   */
  @Get()
  async findAll(@Query() pageDto: PageDto & Partial<Dict>) {
    const [list, total] = await this.dictService.findAll(pageDto);
    return R.success({ list, total }, '查询成功');
  }

  /**
   * 根据ID查询单个字典
   * @param id 字典ID
   * @returns 返回查询到的字典信息
   */
  @Get(':id')
  async findOne(@Param('id') id: number) {
    return R.success(await this.dictService.findOne(id), '查询成功');
  }

  /**
   * 更新字典信息
   * @param updateDictDto 更新字典的数据传输对象
   * @returns 返回更新成功的响应
   */
  @Patch()
  async update(@Body() updateDictDto: UpdateDictDto) {
    return R.success(await this.dictService.update(updateDictDto), '更新成功');
  }

  /**
   * 删除字典
   * @param id 要删除的字典ID
   * @returns 返回删除成功的响应
   */
  @Delete(':id')
  async remove(@Param('id') id: number) {
    return R.success(await this.dictService.remove(id), '删除成功');
  }
}
